package com.bd.scm.dao.mapper.device;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bd.scm.domain.dto.device.DeviceDto;
import com.bd.scm.domain.dto.device.DzStDeviceDto;
import com.bd.scm.domain.dto.device.GetDeviceDto;
import com.bd.scm.domain.dto.door.DoorDto;
import com.bd.scm.domain.models.device.DzStDevice;
import com.bd.scm.domain.models.device.JuserKqRecord;
import com.bd.scm.domain.models.device.ShowStDevice;
import com.bd.scm.domain.models.device.StDevice;

import java.util.List;

/**
 * <p>
 * 设备.
 * </p>
 *
 * @author Mason
 * @since 2019-09-03
 */
public interface StDeviceMapper extends BaseMapper<StDevice> {

    /**
     * @param stDeviceInfoPage
     * @param doorDto          查询条件与门tree一样公用一个DTO
     * @return
     */
    IPage<StDevice> getStDeviceList(Page<StDevice> stDeviceInfoPage, DoorDto doorDto);

    /**
     * 根据场所ID获取场所下设备数量.
     *
     * @param placeId
     * @return
     */
    Integer getDeviceCountByPlaceId(Long placeId);

    /**
     * 设备管理界面--获取设备列表.
     *
     * @param stDevicePage
     * @param getDeviceDto 查询条件
     * @return
     */
    IPage<ShowStDevice> getDevicePages(Page<ShowStDevice> stDevicePage, GetDeviceDto getDeviceDto);

    /**
     * 获取设备最大编号+1.
     *
     * @return 现有最大编号+1
     */
    String getMaxIdFromDevices();

    /**
     * 新增设备--插入设备表.
     *
     * @param deviceDto 新增设备的信息.
     */
    void insertDevice(DeviceDto deviceDto);

    /**
     * 新增设备--插入设备表.
     *
     * @param deviceDto 新增设备的信息.
     */
    void updateDeviceLbAndType(DeviceDto deviceDto);

    /**
     * 新增设备--插入st_dev_module.
     *
     * @param deviceDto 新增设备的信息.
     */
    void insertStDevModule(DeviceDto deviceDto);

    /**
     * 新增设备--插入wt_dev_log.
     *
     * @param deviceDto 新增设备的信息.
     */
    void insertWtDevLog(DeviceDto deviceDto);

    /**
     * 新增设备--插入dt_dev.
     *
     * @param deviceDto 新增设备的信息.
     */
    void insertDtDev(DeviceDto deviceDto);

    /**
     * 根据bh获取设备信息.
     *
     * @param bh 含有bh
     * @return 设备信息
     */
    DeviceDto getDeviceByBh(String bh);

    /**
     * 修改设备.
     *
     * @param deviceDto 新修改设备的信息.
     */
    void editDevice(DeviceDto deviceDto);

    /**
     * 执行存储过程.
     *
     * @param bh 设备编号
     */
    void doDevDelete(String bh);

    /**
     * 删除设备——插入jreal_now_cmd表.
     *
     * @param deviceDto 设备信息
     */
    void insertJrealNowcmd(DeviceDto deviceDto);

    /**
     * 删除设备——更新设备的dev_lb属性为99.
     *
     * @param bh 设备编号
     */
    void updateDevLbFromStDevice(String bh);

    /**
     * 删除设备——插入记录到st_dev_module_del.
     *
     * @param bh 设备编号
     */
    void insertStDevModuleDelByBh(String bh);

    /**
     * 删除设备——删除st_dev_module相关记录.
     *
     * @param bh 设备编号
     */
    void deleteStDevModuleByBh(String bh);

    /**
     * 删除设备——插入记录到dt_dev_del.
     *
     * @param bh 设备编号
     */
    void insertdtDevDelByBh(String bh);

    /**
     * 删除设备——删除dt_dev相关记录.
     *
     * @param bh 设备编号
     */
    void deleteDtDevByBh(String bh);

    /**
     * 删除设备——删除st_control相关记录.
     *
     * @param bh 设备编号
     */
    void deleteStControlByBh(String bh);

    /**
     * 删除设备——删除st_dcard相关记录.
     *
     * @param bh 设备编号
     */
    void deleteStDcardByBh(String bh);

    /**
     * 删除设备——删除mj_door_rule相关记录.
     *
     * @param bh 设备编号
     */
    void deleteMjDoorRuleByBh(String bh);

    /**
     * 删除设备——插入删除日志.
     *
     * @param deviceDto 设备信息
     */
    void insertDeleteDeviceWtDevLog(DeviceDto deviceDto);

    // 大众考勤系统

    // 查询
    List<DzStDevice> getDzStDeviceList(DzStDeviceDto dzStDeviceDto);

    // 获取最大条数
    int getDzStDeviceTotalsize(DzStDeviceDto dzStDeviceDto);

    // 添加
    int insertDzStDevice(DzStDeviceDto dzStDeviceDto);

    // 修改
    int updateDzStDevice(DzStDeviceDto dzStDeviceDto);

    // 删除
    int deleteDzStDevice(DzStDeviceDto dzStDeviceDto);

    /**
     * 获取最大的ID
     * @return
     */
    String getMaxIdFromDzDevices();

    /**
     * 打卡数据保存
     */
    void saveJuserKqRecord(JuserKqRecord juserKqRecord);

    /**
     * 根据考勤点获取当前员工是否有打卡权限
     * @param dzStDeviceDto
     * @return
     */
    int getJuserKqMakeDoc(DzStDeviceDto dzStDeviceDto);

    /**
     * 手机端定位当天上下班是否已打卡接口开发，返回前端上班是否已打卡，下班是否已打卡
     * @param dzStDeviceDto
     * @return
     */
    List<JSONObject> getUserTtTaskCard(DzStDeviceDto dzStDeviceDto);
}
